iT邦幫忙

DAY 2
3

安迪豬的Android學習筆記系列 第 2

我的Android筆記(4)

  • 分享至 

  • xImage
  •  

開發Android時的那些筆記...!!
為了避免ANR的問題,我們要盡可能的避免在UI執行緒裡執行一些比較複雜的邏輯,
將這些邏輯寫在子執行緒裡跑,跑完才回到UI執行緒裡去更新UI。
只是要去控管執行緒是件麻煩的事情,所以Google提供AsyncTask讓我們可以更簡易
的去實作、解決上述的問題...
*******************************************

下面是一個AsyncTask基本的架構,除了doInBackground()裏頭的程式碼是在跑在子執行緒裡,
其他的都是在UI執行緒裡執行的。每一個AsyncTask吃三個參數,分別是Param、Progress、Result。

Param: 在doInBackground的參數。呼叫execute()時的引數。吃初始參數使用。
Progress: 在onProgressUpdate的參數。呼叫setProgress()時的引數。更新進度使用。
Result: 在onPostExecute的參數。 doInBackground裡的回傳值。回傳結果使用。

class MyAsyncTask extends AsyncTask<Param,Integer,Result>{
		@Override
		protected void onPreExecute() {
			// 這在UI執行緒裡執行
			// 在這顯示Loading
		}
		
		@Override
		protected Result doInBackground(Param... params) {
			Result result = new Result();
			// 這在子執行緒裡執行
			// 在這處理複雜的邏輯和進度更新
			return result;
		}
		
		@Override
		protected void onPostExecute(Result result) {
			// 這在UI執行緒裡執行
			// 在這關閉Loading
		}
		
		@Override
		protected void onProgressUpdate(Integer... values) {
			// 這在UI執行緒裡執行
			// 在這更新Loading進度
		}
		
		@Override
		protected void onCancelled() {
			// 這在UI執行緒裡執行
			// 在這處理Cancel事件的後續

		}
}

使用時只要一行~

new MyAsyncTask().execute(new Param("values"));

Google都已經提供這麼好的框架了,當然要好好用之,
不然自己寫Processes/Threads,可能會寫得又臭又長,效能效率都沒AsyncTask來得好呢。

Processes and Threads
http://developer.android.com/reference/java/util/concurrent/package-summary.html

AsynckTask:
http://developer.android.com/guide/components/processes-and-threads.html
http://developer.android.com/reference/android/os/AsyncTask.html


上一篇
我的Android筆記(3)
下一篇
我的Android筆記(5)
系列文
安迪豬的Android學習筆記12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

我要留言

立即登入留言